package com.alexd.leetcode.contest.week91;

/**
 * 861. 翻转矩阵后的得分
 * 	用户通过次数 31
 * 	用户尝试次数 38
 * 	通过次数 31
 * 	提交次数 49
 * 	题目难度 Medium
 * 	有一个二维矩阵 A 其中每个元素的值为 0 或 1 。
 *
 * 	移动是指选择任一行或列，并转换该行或列中的每一个值：将所有 0 都更改为 1，将所有 1 都更改为 0。
 *
 * 	在做出任意次数的移动后，将该矩阵的每一行都按照二进制数来解释，矩阵的得分就是这些数字的总和。
 *
 * 	返回尽可能高的分数。
 *
 *
 *
 * 	示例：
 *
 * 	输入：[[0,0,1,1],[1,0,1,0],[1,1,0,0]]
 * 	输出：39
 * 	解释：
 * 	转换为 [[1,1,1,1],[1,0,0,1],[1,1,1,1]]
 * 	0b1111 + 0b1001 + 0b1111 = 15 + 9 + 15 = 39
 *
 *
 * 	提示：
 *
 * 	1 <= A.length <= 20
 * 	1 <= A[0].length <= 20
 * 	A[i][j] 是 0 或 1
 * https://leetcode-cn.com/contest/weekly-contest-91/problems/score-after-flipping-matrix/
 */

public class Solution3 {


	public int matrixScore(int[][] a) {
		int n = a.length, m = a[0].length;
		for (int i = 0; i < n; i++) {
			if (a[i][0] == 0) {
				for (int j = 0; j < m; j++) {
					a[i][j] ^= 1;
				}
			}
		}
		long ret = 0;
		for (int j = 0; j < m; j++) {
			int one = 0;
			for (int i = 0; i < n; i++) {
				if (a[i][j] == 1)
					one++;
			}
			ret = ret * 2 + Math.max(one, n - one);
		}
		return (int) ret;
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}
